package hive_function;

import org.apache.hadoop.hive.ql.exec.UDF;
import org.json.JSONObject;

public class getJsonKey extends UDF {
    public String evaluate(String line,String key){
        // 拆开数据
        String[] arr = line.split("\\|");
        // 判断数据是否是两个元素，避免下标越界
        if (arr.length != 2){
            return null;
        }
        // 如何将一个字符串转换为一个json对象
        JSONObject jsonObject = new JSONObject(arr[1]);

        String ret = "";
        // select getJsonKey(line,'st') from ods_event_log
        if (key.equals("st")){
            ret = arr[0];
        }else if (key.equals("et")){
            // 要获取的value是什么数据类型，就使用什么get方法
            if (jsonObject.has(key)){
                ret = jsonObject.getString("et");
            }
        }else {
            // 如果不是上面两种参数，那么就只有一种可能了，就是开发人员写的sql在取公共的字段信息
            // 我们要获取的属性对应的值也是一个json，那么尽可能的使用 getJSONObject 方法
            if (jsonObject.has(key)){
                ret = jsonObject.getJSONObject("cm").getString(key);
            }
        }



        return ret;
    }

    public static void main(String[] args) {
        getJsonKey getJsonKey = new getJsonKey();
        String line = "1598093840647|{\"cm\":{\"ln\":\"-67.7\",\"sv\":\"V2.0.4\",\"os\":\"8.2.1\",\"g\":\"DJ1FBAA8@gmail.com\",\"nw\":\"4G\",\"mid\":\"9975\",\"l\":\"es\",\"vc\":\"14\",\"hw\":\"640*1136\",\"uid\":\"9975\",\"ar\":\"MX\",\"t\":\"1598037361278\",\"la\":\"-31.6\",\"md\":\"Huawei-1\",\"vn\":\"1.3.2\",\"ba\":\"Huawei\",\"sr\":\"I\"}}\n";
        String ret = getJsonKey.evaluate(line, "et");
        System.out.println(ret);
    }
}
